package com.atguigu04.compare;

/**
 * ClassName: Product
 * Package: com.atguigu04.compare
 * Description:
 *
 * @Author ZY
 * @Create 13:52
 * @Version 1.0
 */
public class Product implements Comparable{
    private String name;
    private double price;

    public Product() {
    }

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Product{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    /**
     * 当前得嘞需要实现Comparable中的抽象方法，compareTo(Object o)
     * 在此方法中，指明如何判断当前类的对象的大小，比如：按照价格的高低进行大小的比较，（或从低到高排序）
     * @param o the object to be compared.
     * @return 如果当前对象this大于o，则返回正数；
     *         如果当前对象this小于o，则返回负数；
     *         如果当前对象this等于o，则返回0
     *
     */

    @Override
    public int compareTo(Object o) {
        if(o == this){
            return 0;
        }
        if(o instanceof Product){//强转:判断o是否是Product类型，即是否属于 商品 类
            Product p = (Product) o;

            int value = Double.compare(this.price,p.price);
            if(value != 0){
//                return -value; //降序
                return value;//升序
            }
            return this.name.compareTo(p.name);
        }

        //手动抛出一个异常类的对象
        throw new RuntimeException("类型不匹配");
    }
}
